/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package acervo.persistence;

import acervo.model.Midia;
import acervo.model.TipoMidia;
import acervo.util.Erro;
import java.util.ArrayList;
import java.util.Hashtable;

/**
 *
 * @author Fernando
 */
public class Persistencia {
    
    private static Persistencia persistencia = null;    
    private static Hashtable<TipoMidia, AbstractDAO> mapeador;
    
    public static Persistencia getPersistencia() {
        return persistencia;
    }
    
    public Persistencia() {
       mapeador = new Hashtable<TipoMidia, AbstractDAO>();
       mapeador.put(TipoMidia.CDAPLICATIVO, new DAOCdAplicativo());
       mapeador.put(TipoMidia.CDMUSICA, new DAOCdMusica());
       mapeador.put(TipoMidia.DVDAPLICATIVO, new DAODvdAplicativo());
       mapeador.put(TipoMidia.DVDFILME, new DAODvdFilme());
       mapeador.put(TipoMidia.DVDMUSICA, new DAODvdMusica());
       mapeador.put(TipoMidia.HD, new DAOHd());
       mapeador.put(TipoMidia.LIVRO, new DAOLivro());
       mapeador.put(TipoMidia.PDF, new DAOPdf());
       mapeador.put(TipoMidia.REVISTA, new DAORevista());
       mapeador.put(TipoMidia.TEXTO, new DAOTextoImpresso());
    }   
   
   public static Persistencia obterInstancia(){
       if(persistencia == null){
           persistencia = new Persistencia();
       }
       return persistencia;
   }
   
   public boolean save(Midia midia){
        return mapeador.get(midia.getTipo()).save(midia);
   }
   
   public boolean delete(Midia midia){
        return mapeador.get(midia.getTipo()).delete(midia.getId());
   }
  
   public boolean update(Midia midia){
        return mapeador.get(midia.getTipo()).update(midia);
   }
   
   public Midia select(Midia midia){       
       return mapeador.get(midia.getTipo()).select(midia.getId());        
   }
    
   public ArrayList<Midia> selectAll(String chave){
       ArrayList<Midia> result = new ArrayList<Midia>();
       result.addAll(mapeador.get(TipoMidia.CDAPLICATIVO).selectAll(chave));
       result.addAll(mapeador.get(TipoMidia.CDMUSICA).selectAll(chave));
       result.addAll(mapeador.get(TipoMidia.DVDAPLICATIVO).selectAll(chave));
       result.addAll(mapeador.get(TipoMidia.DVDFILME).selectAll(chave));
       result.addAll(mapeador.get(TipoMidia.DVDMUSICA).selectAll(chave));
       result.addAll(mapeador.get(TipoMidia.HD).selectAll(chave));
       result.addAll(mapeador.get(TipoMidia.LIVRO).selectAll(chave));
       result.addAll(mapeador.get(TipoMidia.PDF).selectAll(chave));
       result.addAll(mapeador.get(TipoMidia.REVISTA).selectAll(chave));
       result.addAll(mapeador.get(TipoMidia.TEXTO).selectAll(chave));
       return result;
   }
}
